package main

import "fmt"

/*
两个协程，2个通道
1、生产1-100的数并传递给通道1
2、从通道1中取值，获取奇数，把结果发送到通道2
3、读取ch2的值
------------------------
单向通道，在函数中限制通道的操作
func(ch1 chan<- int)  ch1只能发送数据
func(ch1 <-chan int)  ch1只能接收数据
*/

func main() {
	ch1 := make(chan int, 100)
	ch2 := make(chan int, 100)

	// 1、生产1-100的数并传递给通道1
	go func(ch chan<- int) {
		for i := 0; i < 100; i++ {
			ch <- i
		}
		close(ch1)
	}(ch1)

	// 2、从通道1中取值，获取奇数，把结果发送到通道2
	go func(ch1 <-chan int, ch2 chan<- int) {
		// 方法一获取通道的值
		for {
			data, ok := <-ch1
			if !ok {
				break
			}
			if data%2 != 0 {
				ch2 <- data
			}
		}
		close(ch2)
	}(ch1, ch2)

	// 3、读取ch2的值
	for res := range ch2 {
		fmt.Println(res)
	}

}
